#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int M = 110;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
ll n,f[M][M][M],a[M][M][M],in[M][M][M];
ll dx[]={1,-1,0,0,0,0},dy[]={0,0,1,-1,0,0},dz[]={0,0,0,0,1,-1};
struct ss{int x,y,z;}q1;
basic_string<ss>e[M][M][M];
queue<ss>q;
void topu()
{
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    for(int k=1;k<=n;k++)
    if(!in[i][j][k])
    {q.push((ss){i,j,k});
    f[i][j][k]=1;}
    while(!q.empty())
    {
        q1=q.front();q.pop();
        for(auto [xx,yy,zz]:e[q1.x][q1.y][q1.z])
        {
            f[xx][yy][zz]=max(f[xx][yy][zz],f[q1.x][q1.y][q1.z]+1);
            in[xx][yy][zz]--;
            if(!in[xx][yy][zz])
            q.push((ss){xx,yy,zz});
        }
    }
}
int xx,yy,zz,maxn=0;
int main()
{
    close();
    cin>>n;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    for(int k=1;k<=n;k++)
    cin>>a[i][j][k];
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    for(int k=1;k<=n;k++)
    for(int xu=0;xu<6;xu++)
    {
        xx=i+dx[xu];yy=j+dy[xu];zz=k+dz[xu];
        if(xx<0||yy<0||zz<0||xx>n||yy>n||zz>n)continue;
        if(a[xx][yy][zz]>a[i][j][k])
        {
            e[i][j][k]+=(ss){xx,yy,zz};
            in[xx][yy][zz]++;
        }
    }
    topu();
    for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    for(int k=1;k<=n;k++)
    maxn=max(maxn,f[i][j][k]);
    cout<<maxn;

    return 0;
}